package org.shj.pattern.proxy

class Proxy extends Subject{
  private val subject = new RealSubject()
  
  def function1 = {
    subject.function1
  }
  
  def function2 = {
    subject.function2
  }
}

/**
 * 代理模式： 为其它对象提供一种代理以控制对这个对象的访问
 * Proxy pattern，主要可用于如下情况：
 * 1. 远程代理，也就是为一个对象在不同的地址空间提供局部代表
 * 2. 虚拟代理，是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
 * 3. 安全代理，用来控制真实对象访问时的权限
 * 4. 智能指引，是指当调用真实对象时，代理处理另外一些事情。如记录日志
 * 
 * @author huangjian
 *
 */
object Proxy {
  def main(args: Array[String]): Unit = {
    val proxy = new Proxy
    proxy.function1
    proxy.function2
  }
}